The typical computer system includes software and hardware. The software includes all processes that may execute on the computer system, such as web browsers, word processors, software development tools, networking applications, operating system applications, etc. The hardware includes a processor, memory, networking equipment, etc.
In the past several years, hardware and software technologies have advanced at an exorbitant rate. Concerning hardware, for example, memory manufacturers are steadily increasing the amount of available storage on all sizes of computers, chip manufacturers advance processor speeds, and networking is now pervasive. In terms of software, for example, new programming languages have been created and programming language functionality has increased. Further, operating systems, network applications, and other such applications are constantly advancing. Using the greater functionality provided by the new hardware and software technologies have led to more enhanced features in the execution environment of the application.
However, over time, applications must evolve with technology. Specifically, the applications must be compatible with the environment in which the application is to execute. For example, applications that previously executed on operating systems developed twenty years ago may not be able to execute on the newest operating systems of today.
One trivial method for ensuring that an application can execute on the environment intended for the application is to actually execute the application in the new environment in a controlled setting. In this trivial method, various software testers use the execution environment that would be used by users of the application. The software testers must ensure not only that the execution environment is consistent with the users, but also that the input parameters match all possible input parameters of the users. Ensuring both the execution environment and the input parameters are consistent with the use of the application can be cumbersome.
Thus, toolkits are developed. The toolkits typically gather data about the application both before the application is executing and while the application is executing. Specifically, toolkits may perform algorithmic analysis on the application and/or determine the most likely input parameters of the application.